home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / ip / ka9q / src.arc / ECVECAT.ASM < prev    next >
Assembly Source File  |  1989-03-20  |  2KB  |  135 lines

  1. ; alternative to ecvec.asm -- WORKS ON PC/ATs (80826) only!
  2.     .MODEL    MEMMOD,C
  3.     .286
  4.     LOCALS
  5.     %MACS
  6.     .LALL
  7.  
  8.     extrn    Stktop,Spsave,Sssave,ecint:proc,doret:proc
  9.  
  10.     .CODE
  11. dbase    dw    @Data        ; save loc for ds (must be in code segment)
  12.  
  13. ; ec0vec - Ethernet interrupt handler
  14.     public    ec0vec
  15.     label    ec0vec far
  16.     push    ds        ; save on user stack
  17.     mov    ds,cs:dbase    ; establish interrupt data segment
  18.  
  19.     mov    Sssave,ss    ; stash user stack context
  20.     mov    Spsave,sp
  21.  
  22.     mov    ss,cs:dbase
  23.     lea    sp,Stktop
  24.  
  25.     push    ax        ; save user regs on interrupt stack
  26.     push    bx
  27.     push    cx
  28.     push    dx
  29.     push    bp
  30.     push    si
  31.     push    di
  32.     push    es
  33.  
  34.     mov    ax,0        ; arg for service routine
  35.     push    ax
  36.     call    ecint
  37.     pop    ax
  38.     jmp    doret
  39.  
  40. ; ec1vec - Ethernet interrupt handler
  41.     public    ec1vec
  42.     label    ec1vec far
  43.     push    ds        ; save on user stack
  44.     mov    ds,cs:dbase    ; establish interrupt data segment
  45.  
  46.     mov    Sssave,ss    ; stash user stack context
  47.     mov    Spsave,sp
  48.  
  49.     mov    ss,cs:dbase
  50.     lea    sp,Stktop
  51.  
  52.     push    ax        ; save user regs on interrupt stack
  53.     push    bx
  54.     push    cx
  55.     push    dx
  56.     push    bp
  57.     push    si
  58.     push    di
  59.     push    es
  60.  
  61.     mov    ax,1        ; arg for service routine
  62.     push    ax
  63.     call    ecint
  64.     pop    ax
  65.     jmp    doret
  66.  
  67. ; ec2vec - Ethernet interrupt handler
  68.     public    ec2vec
  69.     label    ec2vec far
  70.     push    ds        ; save on user stack
  71.     mov    ds,cs:dbase    ; establish interrupt data segment
  72.  
  73.     mov    Sssave,ss    ; stash user stack context
  74.     mov    Spsave,sp
  75.  
  76.     mov    ss,cs:dbase
  77.     lea    sp,Stktop
  78.  
  79.     push    ax        ; save user regs on interrupt stack
  80.     push    bx
  81.     push    cx
  82.     push    dx
  83.     push    bp
  84.     push    si
  85.     push    di
  86.     push    es
  87.  
  88.     mov    ax,2        ; arg for service routine
  89.     push    ax
  90.     call    ecint
  91.     pop    ax
  92.     jmp    doret
  93.  
  94. ; fast buffer I/O routines -- used by 3-COM Ethernet controller
  95.  
  96. ; outbuf - put a buffer to an output port
  97.     public    outbuf
  98. outbuf    proc
  99.     arg    port:word,buf:ptr,cnt:word
  100.     if    @Datasize NE 0
  101.         uses    ds,si
  102.         lds    si,buf    ; ds:si = buf
  103.     else
  104.         uses    si
  105.         mov    si,buf    ;ds:si = buf (ds already set)
  106.     endif
  107.     mov    dx,port
  108.     mov    cx,cnt
  109.     cld
  110.     rep outsb        ; works only on PC/AT (80286)
  111.     ret
  112. outbuf    endp
  113.  
  114. ; inbuf - get a buffer from an input port
  115.     public    inbuf
  116. inbuf    proc
  117.     arg    port:word,buf:ptr,cnt:word
  118.     uses    di
  119.     if    @Datasize NE 0
  120.         les    di,buf        ; es:di = buf
  121.     else
  122.         mov    di,buf        ; es:di = buf
  123.         mov    ax,ds
  124.         mov    es,ax
  125.     endif
  126.     mov    dx,port
  127.     mov    cx,cnt
  128.     cld
  129.     rep insb        ; works only on PC/AT (80286)
  130.     ret
  131. inbuf    endp
  132.  
  133.     end
  134.  
  135.